package com.xhj.mybatis.session;

/**
 * RowBounds
 *
 * @author XJks
 * @description RowBounds 类用于在 MyBatis 中实现对查询结果的分页。通过 offset（起始行）和 limit（返回行数）来限制 SQL 查询返回的结果集范围。
 */
public class RowBounds {

    /**
     * 不偏移，表示从结果集的第一行开始
     */
    public static final int NO_ROW_OFFSET = 0;

    /**
     * 不限制返回行数，表示返回所有结果
     */
    public static final int NO_ROW_LIMIT = Integer.MAX_VALUE;

    /**
     * 默认的 RowBounds 实例，offset=0，limit=Integer.MAX_VALUE，等价于不分页
     */
    public static final RowBounds DEFAULT = new RowBounds();

    /**
     * 查询结果的起始行（偏移量），final 表示只读不可修改
     */
    private final int offset;

    /**
     * 查询结果的最大返回行数，final 表示只读不可修改
     */
    private final int limit;

    /**
     * 无参构造方法，创建一个默认的 RowBounds 实例
     * offset=0，limit=Integer.MAX_VALUE，等价于不分页
     */
    public RowBounds() {
        this.offset = NO_ROW_OFFSET;
        this.limit = NO_ROW_LIMIT;
    }

    /**
     * 有参构造方法，允许用户自定义 offset 和 limit
     *
     * @param offset 查询结果的起始行（偏移量）
     * @param limit  查询结果的最大返回行数
     */
    public RowBounds(int offset, int limit) {
        this.offset = offset;
        this.limit = limit;
    }

    /**
     * 获取当前 RowBounds 的 offset 值
     *
     * @return 偏移量
     */
    public int getOffset() {
        return offset;
    }

    /**
     * 获取当前 RowBounds 的 limit 值
     *
     * @return 最大返回行数
     */
    public int getLimit() {
        return limit;
    }

}
